package org.itstack.demo.netty.multicast.client;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

/**
 * @author yichuan@iscas.ac.cn
 * @version 1.0
 * @date 2021/10/20 14:44
 */
public class MulticastSender {
    public static void main(String[] args) throws IOException
    {
        int port = 9010;
        byte[] msg = "Connection successfully!!!".getBytes();

        InetAddress inetRemoteAddr = InetAddress.getByName("224.2.1.100");

        /*
         * Java UDP组播应用程序主要通过MulticastSocket实例进行通信,它是DatagramSocket的是一个子类,
         * 其中包含了一些额外的可以控制多播的属性.
         *
         * 注意：
         *
         * 多播数据报包实际上可以通过DatagramSocket发送,只需要简单地指定一个多播地址。
         * 我们这里使用MulticastSocket,是因为它具有DatagramSocket没有的能力
         */
        MulticastSocket client = new MulticastSocket();

        DatagramPacket sendPack = new DatagramPacket(msg, msg.length,
                inetRemoteAddr, port);

        client.send(sendPack);

        System.out.println("Client send msg complete");

        client.close();

    }
}
/**
 * 组播组可以是永久的也可以是临时的。组播组地址中，有一部分由官方分配的，称为永久组播组。永久组播组保持不变的是它的ip地址，组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的，甚至可以为零。那些没有保留下来供永久组播组使用的ip组播地址，可以被临时组播组利用。
 * 224.0.0.0～224.0.0.255为预留的组播地址（永久组地址），地址224.0.0.0保留不做分配，其它地址供路由协议使用；
 * 224.0.1.0～224.0.1.255是公用组播地址，可以用于Internet；
 * 224.0.2.0～238.255.255.255为用户可用的组播地址（临时组地址），全网范围内有效；
 * 239.0.0.0～239.255.255.255为本地管理组播地址，仅在特定的本地范围内有效。
 *
 * 组播地址列表如下：
 * 224.0.0.0 基准地址（保留）
 * 224.0.0.1 所有主机的地址 （包括所有路由器地址）
 * 224.0.0.2 所有组播路由器的地址
 * 224.0.0.3 不分配
 * 224.0.0.4 dvmrp路由器
 * 224.0.0.5 所有ospf路由器
 * 224.0.0.6 ospf DR/BDR
 * 224.0.0.7 st路由器
 * 224.0.0.8 st主机
 * 224.0.0.9 rip-2路由器
 * 224.0.0.10 Eigrp路由器
 * 224.0.0.11 活动代理
 * 224.0.0.12 dhcp 服务器/中继代理
 * 224.0.0.13 所有pim路由器
 * 224.0.0.14 rsvp封装
 * 224.0.0.15 所有cbt路由器
 * 224.0.0.16 指定sbm
 * 224.0.0.17 所有sbms
 * 224.0.0.18 vrrp
 */

